package com.wave.waveoss.client;

import com.wave.common.model.KV;
import com.wave.common.model.Result;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs;
import io.minio.errors.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;


@Data
@AllArgsConstructor
public class WaveOssClient {

    private MinioClient minioClient;

    private String endpoint;

    private String bucket;


    /**
     * 上传文件
     *
     * @param file 文件
     */
    public Result<KV<String, String>> uploadFile(MultipartFile file) {
        String newName;
        try {
            newName = UUID.randomUUID() + file.getOriginalFilename(); // 文件名，使用 UUID 随机
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(bucket) // 存储桶
                    .object(newName) // 文件名
                    .stream(file.getInputStream(), file.getSize(), -1) // 文件内容
                    .contentType(file.getContentType()) // 文件类型
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail("文件上传失败");
        }
        return Result.success(new KV<>(String.format("%s/%s/%s", endpoint, bucket, newName), newName));
    }

    /**
     * 删除 MinIO 文件
     *
     * @param objectName 文件在桶里的完整对象名（put 时用的 newName）
     */
    public Result<Void> deleteFile(String objectName) {
        try {
            minioClient.removeObject(
                    RemoveObjectArgs.builder()
                            .bucket(bucket)
                            .object(objectName)
                            .build());
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail("文件删除失败");
        }
    }

}
